import { IPSDataEntity } from '../ipsdata-entity';
import { IPSDataEntityObject } from '../ipsdata-entity-object';
import { IPSDEMapAction } from './ipsdemap-action';
import { IPSDEMapDataQuery } from './ipsdemap-data-query';
import { IPSDEMapDataSet } from './ipsdemap-data-set';
import { IPSDEMapField } from './ipsdemap-field';
import { IPSSysSFPlugin } from '../../res/ipssys-sfplugin';

/**
 *
 * 子接口类型识别属性[]
 * @export
 * @interface IPSDEMap
 */
export interface IPSDEMap extends IPSDataEntityObject {
  /**
   * 代码标识
   * @type {string}
   */
  codeName: string;

  /**
   * 映射目标实体对象
   *
   * @type {IPSDataEntity}
   */
  getDstPSDE(): IPSDataEntity | null;

  /**
   * 映射目标实体对象
   *
   * @type {IPSDataEntity}
   */
  get dstPSDE(): IPSDataEntity | null;

  /**
   * 映射目标实体对象（必须存在）
   *
   * @type {IPSDataEntity}
   */
  getDstPSDEMust(): IPSDataEntity;

  /**
   * 映射动态参数
   * @type {IModel}
   */
  mapParams: IModel;

  /**
   * 映射行为集合
   *
   * @type {IPSDEMapAction[]}
   */
  getPSDEMapActions(): IPSDEMapAction[] | null;

  /**
   * 映射行为集合
   *
   * @type {IPSDEMapAction[]}
   */
  get psDEMapActions(): IPSDEMapAction[] | null;

  findPSDEMapAction(objKey: any): IPSDEMapAction | null;

  /**
   * 映射查询集合
   *
   * @type {IPSDEMapDataQuery[]}
   */
  getPSDEMapDataQueries(): IPSDEMapDataQuery[] | null;

  /**
   * 映射查询集合
   *
   * @type {IPSDEMapDataQuery[]}
   */
  get psDEMapDataQueries(): IPSDEMapDataQuery[] | null;

  findPSDEMapDataQuery(objKey: any): IPSDEMapDataQuery | null;

  /**
   * 映射数据集集合
   *
   * @type {IPSDEMapDataSet[]}
   */
  getPSDEMapDataSets(): IPSDEMapDataSet[] | null;

  /**
   * 映射数据集集合
   *
   * @type {IPSDEMapDataSet[]}
   */
  get psDEMapDataSets(): IPSDEMapDataSet[] | null;

  findPSDEMapDataSet(objKey: any): IPSDEMapDataSet | null;

  /**
   * 映射属性集合
   *
   * @type {IPSDEMapField[]}
   */
  getPSDEMapFields(): IPSDEMapField[] | null;

  /**
   * 映射属性集合
   *
   * @type {IPSDEMapField[]}
   */
  get psDEMapFields(): IPSDEMapField[] | null;

  findPSDEMapField(objKey: any): IPSDEMapField | null;

  /**
   * 后台扩展插件
   *
   * @type {IPSSysSFPlugin}
   */
  getPSSysSFPlugin(): IPSSysSFPlugin | null;

  /**
   * 后台扩展插件
   *
   * @type {IPSSysSFPlugin}
   */
  get psSysSFPlugin(): IPSSysSFPlugin | null;

  /**
   * 后台扩展插件（必须存在）
   *
   * @type {IPSSysSFPlugin}
   */
  getPSSysSFPluginMust(): IPSSysSFPlugin;
}
